﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DAO;
using DTO;
using BUS;

namespace GUI
{
    public partial class PhieuMuonSach : UserControl
    {
        public PhieuMuonSach()
        {
            InitializeComponent();
        }
        private PhieuMuonSachDTO _phieuMuon= new PhieuMuonSachDTO();
        private ChiTietPhieuMuonSachDTO _chiTietPhieuMuon= new ChiTietPhieuMuonSachDTO();
        private CuonSachDTO _cuonSach= new CuonSachDTO();
        private TuaDeSachDTO _tuaDeSach= new TuaDeSachDTO();
        private DocGiaDTO _docGia= new DocGiaDTO();

        private void LoadDataPhieuMuon()
        {
            cbMaPM.DataSource = PhieuMuonSachBUS.TimTatCaPMS();
            cbMaPM.DisplayMember = "Mã Phiếu Mượn";
            cbMaPM.ValueMember = "Mã Phiếu Mượn";

            cbSothe.DataSource = DocGiaBUS.TimTatCaDocGia();
            cbSothe.DisplayMember = "Số Thẻ";
            cbSothe.ValueMember = "Số Thẻ";

            cbTenDocGia.DataSource = DocGiaBUS.TimTatCaDocGia();
            cbTenDocGia.DisplayMember = "Họ Tên";
            cbTenDocGia.ValueMember = "Họ Tên";


            //dGVSachMuon.DataSource = CuonSachBUS.HienThiSachVaTuaDe(cbMaPM.Text);
            dGVPhieuMuon.DataSource = PhieuMuonSachBUS.TimTatCaPMS();

        }
        private void LoadDataSach()
        {
            cbMaSach.DataSource = CuonSachBUS.TimSachChuaMuon();
            cbMaSach.DisplayMember = "MaSach";
            cbMaSach.ValueMember = "MaSach";
            
        }
        private void UpLoadDataPhieuMuon()
        {
            _phieuMuon.MaPM = cbMaPM.Text;
            _phieuMuon.SoThe = cbSothe.Text;
            _phieuMuon.NgayMuon = DateTime.Parse(dTimeNgayMuon.Text);
            _phieuMuon.NgayTra = DateTime.Parse(dTimeNgayTra.Text);
        }
        public delegate void GetString(String str);

        public GetString MyGetData;
      
        private void UpLoadDataSach()
        {
            _chiTietPhieuMuon.MaPhieuMuon = tbMaPM2.Text;
            _chiTietPhieuMuon.MaTaiLieu = cbMaSach.Text;
        }
        private bool CheckDaDienPhieuMuon()
        {
            if (cbMaPM.Text==""||cbSothe.Text==""||cbTenDocGia.Text==""||dTimeNgayMuon.Text==""||dTimeNgayTra.Text=="")
            {
                return false;
            }
            return true;
        }
      
        //Ham thiet ke
        private void PhieuMuonSach_Load(object sender, EventArgs e)
        {
            LoadDataPhieuMuon();
            LoadDataSach();
        }
        private void btnThemSach_Click(object sender, EventArgs e)
        {
            UpLoadDataSach();
                    if (ChiTietPhieuMuonSachDAO.CheckChiTietPhieuMuonSach(_chiTietPhieuMuon.MaPhieuMuon, _chiTietPhieuMuon.MaTaiLieu))
                    {
                        tbThongBao.Text = "Thêm thất bại.";
                    }
                    else
                    {
                        if (ChiTietPhieuMuonSachBUS.ThemChiTietPMS(_chiTietPhieuMuon))
                        {
                            _cuonSach = CuonSachDAO.TimCuonSachBangID(cbMaSach.Text);
                            _cuonSach.Lent = "YES";
                            dGVSachMuon.DataSource = ChiTietPhieuMuonSachBUS.TimChiTietPMSByPhieuMuon(tbMaPM2.Text);
                            LoadDataSach();
                            tbThongBao.Text = "Thêm thành công.";
                        }
                        else
                        {
                            tbThongBao.Text = "Thêm thất bại.";
                        }
                    }       
            cbMaSach.Text = "";
            tbTuaDe.Text = "";
        }
        //private bool CheckAllowMuon()
        //{
        //    _docGia = DocGiaDAO.TimDocGia(cbSothe.Text);
        //    if (_docGia.NgayHetHan < DateTime.Today.Date)
        //    {
        //        tbThongBao.Text = "Thẻ đã hết hạn!";
        //        return false;
        //    }
        //    if (PhieuMuonSachDAO.CheckSachDGChuaTra(cbSothe.Text))
        //    {
        //        tbThongBao.Text = "Còn mượn sách đã hết hạn";
        //        return false;
        //    }
        //    if (PhieuMuonSachDAO.CheckSoSachToiDa(cbSothe.Text))
        //    {
        //        tbThongBao.Text = "Bạn đã mượn quá 5 cuốn sách!";
        //        return false;
        //    }

        //    return true;

        //}

        private void btnRemove_Click(object sender, EventArgs e)
        {
            _chiTietPhieuMuon.MaPhieuMuon = dGVSachMuon.SelectedRows[0].Cells[0].Value.ToString();
            _chiTietPhieuMuon.MaTaiLieu = dGVSachMuon.SelectedRows[0].Cells[1].Value.ToString();
                if (ChiTietPhieuMuonSachBUS.XoaChiTietPMS(_chiTietPhieuMuon))
                {
                    _cuonSach.Lent = "NO";
                    CuonSachBUS.SuaCuonSach(_cuonSach);
                    dGVSachMuon.DataSource = ChiTietPhieuMuonSachBUS.TimChiTietPMSByPhieuMuon(_chiTietPhieuMuon.MaPhieuMuon);
                    LoadDataSach();
                    tbThongBao.Text = "Remove thành công rồi nhé.";
                  
                }
                else{
                    tbThongBao.Text = "Remove thất bại.";
                }
            cbMaSach.Text = "";
            tbTuaDe.Text = "";
        }

        private void tbThongBao_TextChanged(object sender, EventArgs e)
        {
            if(MyGetData!=null)
            {
                MyGetData(tbThongBao.Text);
            }
        }

        private void cbMaSach_SelectedIndexChanged(object sender, EventArgs e)
        {
            _cuonSach = CuonSachDAO.TimCuonSachBangID(cbMaSach.Text);
            tbMaTuaDe.Text = _cuonSach.MaTuaDe;

            _tuaDeSach = TuaDeSachDAO.TimTuaDeSachBangID(tbMaTuaDe.Text);
            tbTuaDe.Text = _tuaDeSach.TenTuaDe;
        }

       

        private void dGVSachMuon_SelectionChanged(object sender, EventArgs e)
        {
            if (dGVSachMuon.CurrentRow!=null)
            {
                try
                {
                    cbMaSach.Text = dGVSachMuon.SelectedRows[0].Cells[0].Value.ToString();
                    tbTuaDe.Text = dGVSachMuon.SelectedRows[0].Cells[1].Value.ToString();   
                }
                catch (Exception)
                {
                                      
                }
              
            }
            
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            // Check thong tin doc gia
            // 1.Check qua han
            if (DateTime.Compare(DateTime.Now, DocGiaDAO.TimNgayHetHanCuaThe(cbSothe.Text)) > 0)
            {
                MessageBox.Show("Thẻ độc giả đã hết hạn, vui lòng gia hạn hoặc lập thẻ mới", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            // 2.Check muon vuot so luong qui dinh
            if (DocGiaDAO.TimSoSachDaMuonTrongKhoangThoiGian(cbSothe.Text, DateTime.Now, DateTime.Now.AddDays(-4)) > StaticVariables.SoLuongMuonToiDa)
            {
                MessageBox.Show("Thẻ độc giả đã mượn tới giới hạn qui định về số lượng, không thể mượn thêm", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            if (CheckDaDienPhieuMuon())
            {
                UpLoadDataPhieuMuon();
                if (PhieuMuonSachDAO.CheckPMSByID(_phieuMuon.MaPM))
                {
                    tbThongBao.Text = "Mã phiếu mượn đã tồn tại. ";
                }
                else
                {
                    if (PhieuMuonSachBUS.ThemPMS(_phieuMuon))
                    {
                        LoadDataPhieuMuon();
                        tbThongBao.Text = "Thêm thành công.";
                    }
                    else
                    {
                        tbThongBao.Text = "Thêm thất bại.Mã bị trùng.";
                    }
                }
               
            }
            else
            {
                tbThongBao.Text = "Bạn chưa điền đầy đủ thông tin.";
            }
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            if (PhieuMuonSachDAO.CheckPMSByID(cbMaPM.Text))
            {
                if (PhieuMuonSachBUS.XoaPMS(cbMaPM.Text))
                {
                    LoadDataPhieuMuon();
                    tbThongBao.Text = "Xóa thành công.";
                }
                else
                {
                    tbThongBao.Text = "Xóa thất bại";
                }
            }
            else
            {
                tbThongBao.Text = "Không tìm thấy mã phiếu mượn bạn muốn xóa.";
            }
        }

        private void btnSua_Click(object sender, EventArgs e)
        {
            if (CheckDaDienPhieuMuon())
            {
                UpLoadDataPhieuMuon();
                if (PhieuMuonSachBUS.SuaPMS(_phieuMuon))
                {
                    LoadDataPhieuMuon();
                    tbThongBao.Text = "Cập nhật thành công.";
                }
                else
                {
                    tbThongBao.Text = "Sửa thất bại. Không tìm thấy mã muốn sửa.";
                }
            }
            else
            {
                tbThongBao.Text = "Chưa điền đầy đủ thông tin.";
            }
        }

        private void cbMaPM_SelectedIndexChanged(object sender, EventArgs e)
        {
            LoadDataSach();
            _phieuMuon = PhieuMuonSachDAO.TimPMS(cbMaPM.Text);
            cbSothe.Text = _phieuMuon.SoThe;
            _docGia = DocGiaDAO.TimDocGia(_phieuMuon.SoThe);
            cbTenDocGia.Text = _docGia.HoTen;
        }

        private void cbMaPM_TextChanged(object sender, EventArgs e)
        {
        }

        private void cbSothe_SelectedIndexChanged(object sender, EventArgs e)
        {
            cbMaPM.Text = TaoMaNgauNhien();
            _docGia = DocGiaBUS.TimDocGia(cbSothe.Text);
            cbTenDocGia.Text = _docGia.HoTen;
        }

        private void cbTenDocGia_SelectedIndexChanged(object sender, EventArgs e)
        {
            
        }

        private void cbSothe_TextChanged(object sender, EventArgs e)
        {
            _docGia = DocGiaBUS.TimDocGia(cbSothe.Text);
            cbTenDocGia.Text = _docGia.HoTen;
        }

        private void dGVPhieuMuon_SelectionChanged(object sender, EventArgs e)
        {
            if (dGVPhieuMuon.CurrentRow != null)
            {
                try
                {
                    tbMaPM2.Text = dGVPhieuMuon.SelectedRows[0].Cells[0].Value.ToString();
                    cbSothe.Text = dGVPhieuMuon.SelectedRows[0].Cells[1].Value.ToString();
                    dTimeNgayTra.Text = dGVPhieuMuon.SelectedRows[0].Cells[3].Value.ToString();
                    dTimeNgayMuon.Text = dGVPhieuMuon.SelectedRows[0].Cells[4].Value.ToString();
                    dGVSachMuon.DataSource = ChiTietPhieuMuonSachBUS.TimChiTietPMSByPhieuMuon(tbMaPM2.Text);
                    groupBox4.Enabled = true;
                }
                catch (Exception)
                {

                }
            }
            else groupBox4.Enabled = false;
           
        }
        private String TaoMaNgauNhien()
        {
            string returnid = "";
            Random rd = new Random();
            do
            {
                returnid = "PMS" + DateTime.Now.Day.ToString().PadLeft(2, '0') + DateTime.Now.Month.ToString().PadLeft(2, '0') + DateTime.Now.Year.ToString().Substring(2,2) + rd.Next(1, 999).ToString().PadLeft(3, '0');
                if (returnid.Length > 12)
                {
                    return "";
                }
            }
            while (PhieuMuonSachDAO.CheckPMSByID(returnid));
            return returnid;
        }

        private void btnReFresh_Click(object sender, EventArgs e)
        {
            cbMaSach.Text = "";
            cbTenDocGia.Text = "";
            cbSothe.Text = "";
            dTimeNgayMuon.Text = "";
            dTimeNgayTra.Text = "";
        }

        private void dTimeNgayMuon_ValueChanged(object sender, EventArgs e)
        {

            dTimeNgayTra.Value = dTimeNgayMuon.Value.AddDays((double)StaticVariables.ThoiGianMuonToiDa);
        }

    }
}
